home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 125 / Computer Shopper CD-ROM Issue 125 (1998-07)(Dennis Publishing).iso / Business / Dazzler / DAZZLER.Z / CShapeAction.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-26  |  6.1 KB  |  334 lines

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.awt.Point;
  5. import java.awt.Polygon;
  6. import java.awt.Rectangle;
  7. import java.awt.image.ColorModel;
  8. import java.awt.image.ImageObserver;
  9. import java.awt.image.MemoryImageSource;
  10. import java.io.DataInputStream;
  11.  
  12. public class CShapeAction extends CDisplayAction {
  13.    final int NO_FILL = 2;
  14.    final int PATTERN_FILL = 4;
  15.    final int GRADIENT_FILL = 8;
  16.    protected short m_byType;
  17.    protected int m_nPenStyle;
  18.    protected int m_nFlags;
  19.    protected Point m_Roundness = new Point(0, 0);
  20.    protected CPolyline m_Polyline = new CPolyline();
  21.    protected Color m_PenColor = new Color(0, 0, 0);
  22.    protected Color m_BrushColor = new Color(0, 0, 0);
  23.    protected Color m_rgbToColour = new Color(0, 0, 0);
  24.    protected short m_byArrowHeadStyle;
  25.    private Image m_imgGradient;
  26.  
  27.    void DrawObject(Graphics var1, int var2, CPolyline var3) {
  28.       switch (this.m_byType) {
  29.          case 0:
  30.             if (var3.npoints != 2) {
  31.                System.out.println("Wrong number of points specified for line: " + var3.npoints);
  32.                return;
  33.             }
  34.  
  35.             if (this.m_nPenStyle != 5) {
  36.                var1.setColor(this.m_PenColor);
  37.                var1.drawLine(var3.xpoints[0], var3.ypoints[0], var3.xpoints[1], var3.ypoints[1]);
  38.             }
  39.  
  40.             if (this.m_byArrowHeadStyle != 0) {
  41.                Point var7 = new Point(var3.xpoints[0], var3.ypoints[0]);
  42.                Point var5 = new Point(var3.xpoints[1], var3.ypoints[1]);
  43.                switch (this.m_byArrowHeadStyle) {
  44.                   case 1:
  45.                      Utils.DrawArrowHead(var1, var7, var5, 1, 1);
  46.                      return;
  47.                   case 2:
  48.                      Utils.DrawArrowHead(var1, var7, var5, 1, 0);
  49.                      return;
  50.                   case 3:
  51.                      Utils.DrawArrowHead(var1, var5, var7, 1, 1);
  52.                      return;
  53.                   case 4:
  54.                      Utils.DrawArrowHead(var1, var5, var7, 1, 0);
  55.                      return;
  56.                   case 5:
  57.                      Utils.DrawArrowHead(var1, var7, var5, 1, 1);
  58.                      Utils.DrawArrowHead(var1, var5, var7, 1, 1);
  59.                      return;
  60.                   case 6:
  61.                      Utils.DrawArrowHead(var1, var5, var7, 1, 0);
  62.                      Utils.DrawArrowHead(var1, var7, var5, 1, 0);
  63.                      return;
  64.                }
  65.             }
  66.             break;
  67.          case 1:
  68.          case 2:
  69.          case 3:
  70.          default:
  71.             System.out.println("Invalid shape type requested: " + this.m_byType);
  72.             break;
  73.          case 4:
  74.             if (var3.npoints <= 2) {
  75.                System.out.println("Too few points defined for polygon: " + var3.npoints);
  76.                return;
  77.             }
  78.  
  79.             if ((this.m_nFlags & 8) != 0) {
  80.                CRect var4 = new CRect(var3.GetBoundingRect());
  81.                var1.drawImage(this.m_imgGradient, var4.x, var4.y, (ImageObserver)null);
  82.             } else if ((this.m_nFlags & 2) == 0) {
  83.                var1.setColor(this.m_BrushColor);
  84.                var1.fillPolygon(var3);
  85.             }
  86.  
  87.             if (this.m_nPenStyle != 5) {
  88.                var1.setColor(this.m_PenColor);
  89.                if ((this.m_nFlags & 2) == 0) {
  90.                   var1.drawPolygon(var3);
  91.                   return;
  92.                }
  93.  
  94.                for(int var6 = 0; var6 < var3.npoints - 1; ++var6) {
  95.                   var1.drawLine(var3.xpoints[var6], var3.ypoints[var6], var3.xpoints[var6 + 1], var3.ypoints[var6 + 1]);
  96.                }
  97.  
  98.                return;
  99.             }
  100.       }
  101.  
  102.    }
  103.  
  104.    void DrawObject(Graphics var1, int var2, CRect var3) {
  105.       switch (this.m_byType) {
  106.          case 1:
  107.             if ((this.m_nFlags & 8) != 0) {
  108.                var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
  109.             } else if ((this.m_nFlags & 2) == 0) {
  110.                var1.setColor(this.m_BrushColor);
  111.                var1.fillRect(var3.x, var3.y, var3.width - 1, var3.height - 1);
  112.             }
  113.  
  114.             if (this.m_nPenStyle != 5) {
  115.                var1.setColor(this.m_PenColor);
  116.                var1.drawRect(var3.x, var3.y, var3.width - 1, var3.height - 1);
  117.                return;
  118.             }
  119.             break;
  120.          case 2:
  121.             if ((this.m_nFlags & 8) != 0) {
  122.                var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
  123.             } else if ((this.m_nFlags & 2) == 0) {
  124.                var1.setColor(this.m_BrushColor);
  125.                var1.fillRoundRect(var3.x, var3.y, var3.width - 1, var3.height - 1, this.m_Roundness.x, this.m_Roundness.y);
  126.             }
  127.  
  128.             if (this.m_nPenStyle != 5) {
  129.                var1.setColor(this.m_PenColor);
  130.                var1.drawRoundRect(var3.x, var3.y, var3.width - 1, var3.height - 1, this.m_Roundness.x, this.m_Roundness.y);
  131.                return;
  132.             }
  133.             break;
  134.          case 3:
  135.             if ((this.m_nFlags & 8) != 0) {
  136.                var1.drawImage(this.m_imgGradient, var3.x, var3.y, (ImageObserver)null);
  137.             } else if ((this.m_nFlags & 2) == 0) {
  138.                var1.setColor(this.m_BrushColor);
  139.                var1.fillOval(var3.x, var3.y, var3.width - 1, var3.height - 1);
  140.             }
  141.  
  142.             if (this.m_nPenStyle != 5) {
  143.                var1.setColor(this.m_PenColor);
  144.                var1.drawOval(var3.x, var3.y, var3.width - 1, var3.height - 1);
  145.                return;
  146.             }
  147.       }
  148.  
  149.    }
  150.  
  151.    boolean LoadFromFile(DataInputStream var1) {
  152.       this.m_byType = FileLoad.ReadCPlusByte(var1);
  153.       this.m_nFlags = FileLoad.ReadCPlusInt(var1);
  154.       this.m_nPenStyle = FileLoad.ReadCPlusInt(var1);
  155.       FileLoad.ReadCPlusPoint(var1);
  156.       this.m_PenColor = FileLoad.ReadColor(var1);
  157.       this.m_Roundness = FileLoad.ReadCPlusPoint(var1);
  158.       FileLoad.ReadCPlusInt(var1);
  159.       this.m_BrushColor = FileLoad.ReadColor(var1);
  160.       FileLoad.ReadCPlusInt(var1);
  161.       this.m_rgbToColour = FileLoad.ReadColor(var1);
  162.       this.m_byArrowHeadStyle = FileLoad.ReadCPlusByte(var1);
  163.       this.m_Polyline.LoadFromFile(var1);
  164.       super.LoadFromFile(var1);
  165.       return true;
  166.    }
  167.  
  168.    public void ProduceGradientImage(CRect var1) {
  169.       this.m_imgGradient = Utils.DrawGradientFill(var1, this.m_BrushColor, this.m_rgbToColour, this.m_nFlags);
  170.       if (this.m_byType != 1) {
  171.          int[] var2 = Utils.GrabPixels(this.m_imgGradient, 0, 0, var1.width, var1.height);
  172.          Image var3 = Globals.thePresView.createImage(var1.width, var1.height);
  173.          Graphics var4 = var3.getGraphics();
  174.          var4.setColor(Color.black);
  175.          var4.fillRect(0, 0, var1.width, var1.height);
  176.          var4.setColor(Color.white);
  177.          switch (this.m_byType) {
  178.             case 2:
  179.                var4.fillRoundRect(0, 0, var1.width - 1, var1.height - 1, this.m_Roundness.x, this.m_Roundness.y);
  180.                break;
  181.             case 3:
  182.                var4.fillOval(0, 0, var1.width - 1, var1.height - 1);
  183.                break;
  184.             case 4:
  185.                CPolyline var5 = new CPolyline(this.m_Polyline.xpoints, this.m_Polyline.ypoints, this.m_Polyline.npoints);
  186.                CPolyline var6 = new CPolyline();
  187.                var6.npoints = var5.npoints;
  188.                var6.xpoints = var5.xpoints;
  189.                var6.ypoints = var5.ypoints;
  190.  
  191.                for(int var7 = 0; var7 < var6.npoints; ++var7) {
  192.                   int[] var10000 = var6.xpoints;
  193.                   var10000[var7] -= var1.x;
  194.                   var10000 = var6.ypoints;
  195.                   var10000[var7] -= var1.y;
  196.                }
  197.  
  198.                var4.fillPolygon(var6);
  199.                break;
  200.             default:
  201.                System.out.println("Gradient mask requested for illegal shape: " + this.m_byType);
  202.          }
  203.  
  204.          int[] var8 = Utils.GrabPixels(var3, 0, 0, var1.width, var1.height);
  205.          int var9 = Color.black.getRGB();
  206.  
  207.          for(int var10 = 0; var10 < var1.width * var1.height; ++var10) {
  208.             if (var8[var10] == var9) {
  209.                var2[var10] = 0;
  210.             }
  211.          }
  212.  
  213.          ColorModel var11 = ColorModel.getRGBdefault();
  214.          this.m_imgGradient = Globals.thePresView.createImage(new MemoryImageSource(var1.width, var1.height, var11, var2, 0, var1.width));
  215.       }
  216.  
  217.    }
  218.  
  219.    public CShapeAction() {
  220.       super(31);
  221.       ((CDisplayAction)this).SetZOrder((short)6);
  222.    }
  223.  
  224.    boolean HitTestCheck(Point var1, CRect var2) {
  225.       return ((Rectangle)var2).inside(var1.x, var1.y);
  226.    }
  227.  
  228.    boolean HitTestCheck(Point var1, CPolyline var2) {
  229.       if (var2.npoints == 2) {
  230.          int[] var3 = new int[4];
  231.          int[] var4 = new int[4];
  232.          int var5 = 0;
  233.  
  234.          do {
  235.             var3[var5] = var2.xpoints[var5 / 2];
  236.             var4[var5] = var2.ypoints[var5 / 2];
  237.             ++var5;
  238.          } while(var5 < 4);
  239.  
  240.          if (var2.xpoints[0] < var2.xpoints[1]) {
  241.             var3[0] -= 6;
  242.             var3[1] += 6;
  243.             var3[2] += 6;
  244.             var3[3] -= 6;
  245.          } else {
  246.             var3[0] += 6;
  247.             var3[1] -= 6;
  248.             var3[2] -= 6;
  249.             var3[3] += 6;
  250.          }
  251.  
  252.          if (var2.ypoints[0] < var2.ypoints[1]) {
  253.             var4[0] -= 6;
  254.             var4[1] += 6;
  255.             var4[2] += 6;
  256.             var4[3] -= 6;
  257.          } else {
  258.             var4[0] += 6;
  259.             var4[1] -= 6;
  260.             var4[2] -= 6;
  261.             var4[3] += 6;
  262.          }
  263.  
  264.          var2 = new CPolyline(var3, var4, 4);
  265.       }
  266.  
  267.       System.out.println("HitTestCheck returning " + ((Polygon)var2).inside(var1.x, var1.y));
  268.       return ((Polygon)var2).inside(var1.x, var1.y);
  269.    }
  270.  
  271.    CPolyline GetActualPolyline() {
  272.       return this.m_Polyline;
  273.    }
  274.  
  275.    boolean DoAction() {
  276.       boolean var1 = false;
  277.       CRect var2 = new CRect();
  278.       if (this.m_byType != 0 && this.m_byType != 4) {
  279.          if (this.m_byType == 1 || this.m_byType == 2 || this.m_byType == 3) {
  280.             var2.reshape(((CDisplayAction)this).GetActualRect());
  281.          }
  282.       } else {
  283.          var2.reshape(this.m_Polyline.GetBoundingRect());
  284.          ++var2.width;
  285.          ++var2.height;
  286.          if (this.m_byArrowHeadStyle > 0) {
  287.             ((Rectangle)var2).grow(3, 3);
  288.          }
  289.       }
  290.  
  291.       if (!((Rectangle)var2).equals(((CDisplayAction)this).GetDrawRect())) {
  292.          if (!((CDisplayAction)this).GetDrawRect().isEmpty()) {
  293.             Globals.thePresView.InvalidateOffScreenRect(((CDisplayAction)this).GetDrawRect());
  294.          }
  295.  
  296.          ((CDisplayAction)this).SetDrawRect(var2);
  297.          var1 = true;
  298.       }
  299.  
  300.       if ((this.m_nFlags & 8) != 0 && this.m_byType != 0) {
  301.          this.ProduceGradientImage(var2);
  302.       }
  303.  
  304.       int var3 = 0;
  305.       switch (this.m_byType) {
  306.          case 0:
  307.             var3 = 4;
  308.             break;
  309.          case 1:
  310.             var3 = 16;
  311.             break;
  312.          case 2:
  313.             var3 = 8;
  314.             break;
  315.          case 3:
  316.             var3 = 32;
  317.             break;
  318.          case 4:
  319.             var3 = 2;
  320.             break;
  321.          default:
  322.             System.out.println("ERROR: Illegal shape type requested: " + this.m_byType);
  323.       }
  324.  
  325.       if (super.m_Effect.HasValidEffect()) {
  326.          var3 |= 2048;
  327.          Globals.thePresView.RenderAndDrawDirtyList();
  328.       }
  329.  
  330.       Globals.thePresView.AddDrawObject((CIconObject)this, var3, var1);
  331.       return true;
  332.    }
  333. }
  334.